#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<netdb.h>
void error_handling(char *message);
//将域名转为IP地址
int main(int argc,char* argv[])
{
	int i;
	struct hostent *host;
	if(argc!=2)
	{
		printf("Usage:%s<addr>\n",argv[0]);
		exit(1);
	}
	//struct hostent* gethostbyname(const char *hostname);	
	host=gethostbyname(argv[1]);
	if(!host)
		error_handling("gethost....error");
	printf("Official name:%s \n",host->h_name);//获取官方域名
	for(i=0;host->h_aliases[i];i++)//获取除官方域名的多个域名
		printf("Aliases %d:%s \n",i+1,host->h_aliases[i]);
	printf("Address type:%s \n",(host->h_addrtype==AF_INET)?"AF_INET":"AF_INET6");//获取地址类型
	//char* inet_ntoa(struct in_addr)将二进制数字转换为网络地址
	//host->h_addr_list[i]得到char* 将其转换为struct in_addr*，这是地址值，所以需要取值，使用*
	for(i=0;host->h_addr_list[i];i++)
		printf("IP addr %d:%s\n",i+1,inet_ntoa(*(struct in_addr*)host->h_addr_list[i]));
	return 0;
}
void error_handling(char *message)
{
	fputs(message,stderr);
	fputc('\n',stderr);
	exit(1);
}
